package demo1;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
//此时，该类被称为窗体类
//1，定义组件
//2，初始化组件
public class Student1 extends JFrame implements ActionListener{
    public static void main(String[] args){
        new Student1();
    }
    // 说明：一个类需要页面的显示，则那个类要继承JFrame。
    // 属性
    // 文本域
    private JTextArea jta;
    // 滚动条
    private JScrollPane jsp;
    // 面板里面是文本框和按钮
    private JPanel jp;
    private JTextField jtf;
    private JButton jb ;
    //输出流
    private BufferedWriter bw = null;

    // 构造器
    public Student1(){

        // 初始化上面的属性
        jta = new JTextArea();

        // 将文本域添加到滚动条中
        jsp = new JScrollPane(jta);
        jp = new JPanel();
        jtf =new JTextField(15);
        jb = new JButton("发送");

        // 把按钮和文本框添加到面板中
        jp.add(jtf);
        jp.add(jb);

        // 把滚动条和面板添加到JFrame中去。因为这个类继承了窗体，所以我就是窗体，所以this就是窗体
        this.add(jsp,BorderLayout.CENTER); //这个设置在中间
        this.add(jp,BorderLayout.SOUTH); //南

        this.setTitle("同学1");
        this.setSize(500,500);
        this.setLocation(200, 200);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
        //这个this，去掉也可以
        jb.addActionListener(this);

        // 回车点击事件

        jtf.addKeyListener(new KeyAdapter() {
            public void keyTyped(KeyEvent e) {
                if((char)e.getKeyChar()==KeyEvent.VK_ENTER) {
                    useVoid01();
                }
            }
        });

        try{
            /*******客户端 TCP协议*********/
            // 1.创建一个客户端的套接字（尝试连接）
            Socket socket = new Socket("127.0.0.1",8888);

            // 2.获取socket通道的输入流
            BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));

            // 3 字符缓冲流（字符输出流（套接字输出数据））
            bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));


            //循环读取数据，并拼接到文本域中
            String line = null;
            while((line = br.readLine()) !=null){
                jta.append(line + "\n");
            }

            // 3. 获取输出流

            // 4.关闭流
            socket.close();

            /******************************/
        }catch(Exception e){
            e.printStackTrace();
        }
    }

    //发送数据
    public void actionPerformed(ActionEvent e){
        useVoid01();
    }

    public void useVoid01(){
        // 1.获取文本框中需要发送的内容
        String text = jtf.getText();
        // 2. 拼接内容
        text = "同学1:" + text;

        // 3.自己显示
        jta.append(text + "\n");

        try{
            // 4.发送
            bw.write(text);
            bw.newLine(); // 换行
            bw.flush();  // 刷新
            // 5.清空
            jtf.setText("");

        }catch(IOException e1){
            e1.printStackTrace();
        }

    }
    //行为
}


